package cn.piesat.scanning.service;

import cn.piesat.scanning.dto.DbDmsScanningMetadataAuxInfoDTO;

import java.util.List;
import java.util.Set;

/**
 * 辅助数据相关服务层接口定义
 * @author xhl
 */
public interface DbDmsScanningMetadataAuxInfoService {

    /**
     * 添加辅助数据信息至数据库
     * @param dto 辅助信息实体类
     * @param taskId 任务ID
     */
    void addEntity(DbDmsScanningMetadataAuxInfoDTO dto,String taskId);

    void addEntityBatch(List<DbDmsScanningMetadataAuxInfoDTO> dtos, String taskId);

    /**
     * 根据文件名称和文件大小查找唯一的辅助数据信息
     * @param name 文件名称
     * @param size 文件大小
     * @return
     */
    DbDmsScanningMetadataAuxInfoDTO queryFileUnique(String name, Long size);

    /**
     * 根据气象要素和时间范围查询辅助数据信息集合
     * @param fileWant 气象要素
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<DbDmsScanningMetadataAuxInfoDTO> listByFileWantAndRangeTime(String fileWant,String startTime,String endTime);

    /**
     * 根据气象要素列表和时间范围查询辅助数据集合并根据时间+时次降序排序
     * @param wantList 气象要素列表
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<DbDmsScanningMetadataAuxInfoDTO> listByFileWantListAndRangeTimeOrder(List<String> wantList, String startTime, String endTime);

    /**
     * 根据时间范围查询set集合文件名称
     * @param startTime
     * @param endTime
     * @return
     */
    Set<String> listByDate(String startTime, String endTime);

    /**
     * 获取辅助文件
     * @param fileWantList 文件要素集合
     * @param startTime 起始时间
     * @param endTime 结束时间
     */
    List<DbDmsScanningMetadataAuxInfoDTO> getAuxFileInfoList(List<String> fileWantList, String startTime, String endTime);

    List<DbDmsScanningMetadataAuxInfoDTO> findByFileCatalogAndForecastDateBetweenOrderByForecastDateDesc(String fileCatalog,  String startTime, String mainFileDate);

    List<DbDmsScanningMetadataAuxInfoDTO> findByFileCatalogAndForecastDateOrderByFileDateDesc(String fileCatalog, String forecastDate);
}
